Caching is known to help increase the performance of storage systems by transparently storing data so that future requests for that data can be served faster. The larger the usable cache size, the better performance that the cache can deliver to the overall system. A storage system cache comprises two portions: a data portion storing data that is read or written by a host, such as a server, and a tag portion used to identify and/or locate a subset of a larger amount of data accessible by the host that is stored in the cache. Generally, the larger the data portion the higher the fraction of the host accesses that “hit” in the cache, and the higher the performance of the storage system.
Data compression may be used in order to reduce the total storage space or transmission time required for a given size of data. However, the compressibility of data is variable and depends on the level of data entropy. This variability in the compressibility of data results in a need for data storage spaces of varying size.
In storage system caching, it is often necessary to present a fixed and stable cache size to the upper layers of the system. Therefore, space which may be gained by compression of data on a storage device may not be utilized by the cache due to the variable nature of the compressibility of the data and its corresponding size.
Therefore, there exists a need for improved methods and systems for storage system caching when data may vary in size due to compression of the data.